LCML/HTTP
cookieget
cookieget - Получение значения или свойства cookie
Метод
Part: LCML/HTTP
Функция cookieGet извлекает значение или указанное свойство cookie по его имени из HTTP-запроса.
Формат:
cookieGet name field request
name - имя cookie.
field - название свойства cookie (опционально).
EXPIRES - возвращает время истечения срока действия cookie.
MAXAGE - возвращает максимальный возраст cookie в секундах.
PATH - возвращает путь, для которого действителен cookie.
SECURE - возвращает флаг безопасности (true/false).
по умолчанию - возвращает значение cookie.
request - HTTP-запрос (http.Request), содержащий cookie. Результат:
Возвращает значение cookie или указанное свойство. Если cookie не найдено, возвращается текст ошибки.
Пример использования:
{{ $ticketUid := cookieget "ticket" "" $.Value.Request }}
cookieset
cookieset - Установка cookie в HTTP-ответе
Метод
Part: LCML/HTTP
Функция cookieSet устанавливает cookie с заданными параметрами в HTTP-ответ.
Формат:
cookieSet name value ttl response
name - имя cookie.
value - значение cookie.
ttl - время жизни cookie в формате time.Duration (например, “1h”, “30m”).
response - HTTP-ответ (http.ResponseWriter), в который будет добавлено cookie. Результат:
Возвращает пустую строку, если cookie успешно установлено. В случае ошибки парсинга времени жизни ( ttl ) возвращает описание ошибки.
Пример использования:
{{ cookieset "ticket" $uidTicket "2592000s" $.RespWriter }}
curl
curl - Отправка HTTP-запроса
Метод
Part: LCML/HTTP
Функция curl выполняет HTTP-запрос с заданными параметрами. Она поддерживает передачу заголовков, тела запроса и cookie. Если ответ не содержит данных ( res.Data пуст), функция возвращает “сырые” данные ответа.
Формат:
curl method url bodyJSON headers cookies
method - HTTP-метод запроса (GET, POST, PUT, и т. д.).
url - URL, на который отправляется запрос.
bodyJSON - тело запроса в формате JSON.
headers - мапа заголовков, где ключи - имена заголовков, а значения - их содержимое.
cookies - массив мапок, представляющих cookie. Результат:
Данные из ответа ( res ), если поле res.Data содержит значения.
“Сырые” данные ( raw ), если res.Data пуст. Пример использования:
{{ curl "GET" $exampleUrl "" nil nil }}
parsebody
parsebody - Чтение и обработка тела HTTP-запроса
Метод
Part: LCML/HTTP
Функция parseBody предназначена для чтения содержимого тела HTTP-запроса и его преобразования в указанный формат. Полезна при работе с API-запросами или при обработке данных от клиента.
Формат:
parsebody request format
request — HTTP-запрос, тело которого необходимо обработать.
format — формат, в который требуется преобразовать данные (по умолчанию возвращает содержимое тела запроса в виде строки). Результат:
Возвращает десериализованный объект или строку в зависимости от заданного формата. В случае ошибок возвращает сообщение об ошибке.
Пример использования:
{{ $formData := parsebody $.Request "json" }}
{{ $name := index $formData "name" }}
{{ $email := index $formData "email" }}
{{ $message := index $formData "message" }}
Тело запроса (JSON):
{
"name": "Иван Ловецкий",
"email": "ivan.lovetsky@example.com",
"message": "Хотелось бы узнать больше о курсе по программированию на Golang."
}
Результат: Если данные корректны, выводится сообщение благодарности с данными пользователя.
parseform
parseform -
Метод
Part: LCML/HTTP
Функция parseForm извлекает данные из формы, отправленной в HTTP-запросе, и преобразует их в карту, где каждому ключу сопоставлен массив значений.
Формат:
parseform request
- request — HTTP-запрос (объект http.Request), содержащий данные формы. Результат:
Возвращает карту ( map[string][]string ), где ключи — имена полей формы, а значения — массив значений, соответствующих каждому ключу. Если возникает ошибка при обработке данных формы, возвращается nil.
Пример использования:
{{ $formData := parseform $.Request }}
{{ $name := index $formData "name" }}
{{ $email := index $formData "email" }}
{{ $course := index $formData "course" }}
Тело формы (отправленное POST-запросом):
name=Иван Ловецкий
email=ivan.lovetsky@example.com
course=Программирование на Golang
Результат: Получение информации о регистрации пользователя для курса программирования на Golang.
parseformsep
parseformsep -
Метод
Part: LCML/HTTP
Функция parseformsep предназначена для обработки значений из HTTP-запроса и их преобразования в карту ( map ), где ключ — это имя параметра, а значение — строка, содержащая значения этого параметра, объединённые указанным разделителем.
Формат:
parseformsep request separator
- request — HTTP-запрос (объект http.Request), содержащий данные формы.
- separator — Разделитель, используемый для объединения значений (по умолчанию, ). Результат:
Возвращает map[string]string, где ключи — это названия полей из формы, а значения — строки, объединённые указанным разделителем.
Пример использования:
Входной HTTP-запрос содержит следующие данные формы:
name: [Ivan, Katerina]
course: [Golang, Javascript]
email: [ivan.lovetsky@example.com, katerina.zakharova@example.com]
Шаблон:
{{ $formData := parseformsep $.Request ";" }}
Имя: {{ index $formData “name” }}
Курсы: {{ index $formData “course” }}
Email: {{ index $formData “email” }}
>>
<p>Имя: Ivan;Katerina</p>
<p>Курсы: Golang;Javascript</p>
<p>Email: ivan.lovetsky@example.com;katerina.zakharova@example.com</p>
parseuseragent
parseuseragent - Функция parseuseragent анализирует строку заголовка User-Agent, извлекая различные параметры, такие как название приложения, версия, операционная система, тип устройства и статус (мобильное ли это устройство, планшет или бот).
Метод
Part: LCML/HTTP
Функция возвращает строковое значение, соответствующее запрашиваемому параметру.
Формат:
parseUserAgent header param
header (тип: string) — строка, содержащая заголовок User-Agent, который необходимо разобрать.
param (тип: string) — параметр, значение которого требуется вернуть. Возможные значения param:
“Name” — Название приложения или браузера.
“Version” — Версия приложения или браузера.
“OS” — Название операционной системы устройства.
“OSVersion” — Версия операционной системы устройства.
“Device” — Тип устройства (например, мобильный телефон, планшет или десктоп).
“isMobile” — true, если это мобильное устройство.
“isTablet” — true, если это планшет.
“isBot” — true, если это бот.
“isDesktop” — true, если это десктоп. Результат:
Возвращаемое значение — строка, соответствующая значению для запрашиваемого параметра.Если параметр не найден, возвращается пустая строка.
Пример:
{{$platform := parseUserAgent (index (index $.Value.Request.Header "User-Agent") 0) "OS" }}
profile
profile - Получение профиля пользователя
Метод
Part: LCML/HTTP
Функция profile извлекает данные о текущем профиле пользователя из контекста HTTP-запроса, затем парсит эти данные в структуру models.ProfileData.
**Формат**
profile r
- r (http.Request) — HTTP-запрос, в котором содержится информация о текущем профиле пользователя в контексте. Результат
Возвращает структуру данных models.ProfileData, содержащую информацию о профиле пользователя. Если произошла ошибка при парсинге или если профиль отсутствует, возвращается пустая структура.
Пример использования
profileuid
profileuid - Получение UID профиля по UID роли
Метод
Part: LCML/HTTP
Формат
profileuid r roleuid
r (http.Request) — HTTP-запрос, содержащий информацию о профиле пользователя.
roleuid (string) — UID роли, связанной с профилем. Если пусто, возвращается UID текущей роли. Результат
Возвращает строку — UID профиля, связанного с указанной ролью.
Пример использования
{{ $p := profileuid $.Value.Request $role }}
redirect
redirect - Перенаправление пользователя на указанный URL
Метод
Part: LCML/HTTP
Функция redirect выполняет перенаправление HTTP-запроса на указанный URL с определенным статусным кодом.
Формат:
redirect writer request url statusCode
writer ( http.ResponseWriter ) — объект для записи HTTP-ответа.
request ( http.Request ) — объект HTTP-запроса, вызывающего перенаправление.
url — строка, содержащая URL, на который должно произойти перенаправление.
statusCode — целое число, статус кода перенаправления (например, 302 для временного перенаправления). Результат:
Функция не возвращает результатов. Пользователь перенаправляется на указанный URL.
Пример использования:
{{ redirect $.Writer $.Request "/new-page" 302 }}
Пользователь регистрируется на образовательной платформе и после успешного завершения регистрации перенаправляется на страницу курсов:
{{ redirect $.Writer $.Request "/courses" 302 }}
urljoin
urljoin - Функция urljoin собирает URL-строку из словаря.
Метод
Part: LCML/HTTP
Формат
urljoin dict
dict: map с ключами, определенными функцией urlParse. Результат
Возвращает строку URL, собранную из словаря.
Если ключи отсутствуют, используются пустые строки.
Если значение userinfo содержит недопустимые данные, возникает паника. Пример использования
{{ $dict := dict “scheme” “https” “host” “host.com:8080” “path” “/path” “query” “query=1” “fragment” “frag” “userinfo” “user:pass” }} {{ $result := urljoin $dict }} {{ $result }} >> https://user:pass@host.com:8080/path?query=1#frag
urlparse
urlparse - Функция urlparse преобразует URL-строку в словарь, содержащий его составляющие.
Метод
Part: LCML/HTTP
Формат
urlparse url
- url: строка URL. Результат
Возвращает map с ключами:
scheme: схема URL.
host: полный хост (включая порт).
hostname: хост без порта.
path: путь URL.
query: строка запроса.
opaque: непрозрачная часть URL.
fragment: фрагмент (якорь).
userinfo: информация о пользователе (имя и пароль). Пример использования
{{ $result := urlparse “https://user:pass@host.com:8080/path?query=1” }} {{ $result }} >> map[scheme:https host:host.com:8080 hostname:host.com path:/path query:query=1 userinfo:user:pass]
xrealip
xrealip - Получение IP-адреса из HTTP-запроса
Метод
Part: LCML/HTTP
Функция xrealip извлекает IP-адрес клиента из заголовков HTTP-запроса или, если заголовки отсутствуют, из адреса удаленного подключения.
Формат:
xRealIp r
- r — объект HTTP-запроса (http.Request). Пример:
Возвращает строку с IP-адресом, полученным из:
Заголовка X-Real-Ip.
Если X-Real-Ip отсутствует — заголовка X-Forwarded-For.
Если оба заголовка отсутствуют — из свойства RemoteAddr объекта HTTP-запроса.